4
תגובות

Yii| לא שולח CheckBox

פתח ArielTador ,
היי,

בפריימוורק Yii, עשיתי טופס קטן, בטופס יש CheckBox, אבל כשאני שולח את הטופס, הכל נשלח חוץ מה - CheckBox.
הוא אמור להחזיר false/true, אבל הוא תמיד נשאר על false למרות שאני מסמן בו V בטופס.
מה עושים?

4 תשובות

avatar ענה intval ב 10 לדצמבר 2013 #

קשה לנחש איך עשית את זה בלי לראות את הקוד של הוויו והקוד שמטפל בנתונים מהטופס

avatar ענה ArielTador ב 10 לדצמבר 2013 #

<?php $form=$this->beginWidget('CActiveForm', array('action' => Yii::app()->createUrl('main/login'))); ?>
          <?php echo $form->errorSummary($model); ?>
         
          <?php echo $form->label($model,'email'); ?>
          <?php echo $form->emailField($model,'email'); ?>
         
          <?php echo $form->label($model,'password'); ?>
          <?php echo $form->passwordField($model,'password'); ?>
         
          <?php echo $form->checkBox($model,'rememberMe'); ?>
          <?php echo $form->label($model,'rememberMe'); ?>
         
          <?php echo CHtml::submitButton('Login'); ?>
        <?php $this->endWidget(); ?>


הטופס ^

<?php
class LoginForm extends CFormModel
{
  public $email;
  public $password;
  public $rememberMe;
 
  private $_identity;
 
    public function rules()
  {
    return array(
      array('email, password', 'required', 'message' => Yii::lang('login_form_null_inputs')),
      array('email', 'email', 'allowEmpty' => false, 'checkMX' => true, 'message' => Yii::lang('login_form_null_inputs')),
      array('password', 'authenticate')
    );
  }
 
  public function authenticate($attribute,$params)
  {
    $this->_identity = Accounts::model()->checkLogin($this->email, $this->password, $this->rememberMe);
    if(!$this->_identity)
            $this->addError('password',Yii::lang('login_form_incorrect_email_or_password'));
  }
 
  public function attributeLabels()
  {
    return array
    (
      'email' => Yii::lang('login_form_email_input'),
      'password' => Yii::lang('login_form_password_input'),
      'rememberMe' => Yii::lang('login_form_remember_me_input'),
    );
  }
}
?>


LoginForm ^ המודל של הטופס.

<?php
class Accounts extends CActiveRecord
{
  public static function model($className=__CLASS__)
  {
    return parent::model($className);
  }
 
  public function checkLogin($email, $password, $rememberMe)
  {
    $user = $this->findByAttributes(array('email' => $email, 'password' => $password));
    if($user===null)
    {
      return false;
    }
    else
    {
      $this->checkLogined($user->id, $email, $password, $user->active, $rememberMe);
      return true;
    }
    return false;
  }
 
  private function checkLogined($id, $email, $password, $active, $rememberMe)
  {
    $cookies = array('ui' => $id, 'ue' => $email, 'up' => $password, 'ua' => $active);
    foreach($cookies as $name=>$value)
    {
      $cookie = new CHttpCookie($name, $value);
      $cookie->expire = time()+60*60*48;
      Yii::app()->request->cookies[$name] = $cookie;
    }
    if($rememberMe==true)
    {
      $cookie = new CHttpCookie('rm', $email);
      Yii::app()->request->cookies['rm'] = $cookie;
    }
  }
 
  public function primaryKey()
  {
    return 'id';
  }
}
?>


המודל Accounts ^^.

<?php
class MainController extends CController
{
  public function actionIndex()
  {
    $model = new LoginForm();
    $this->render('main', array('model'=>$model));
  }
 
  public function actionLogin()
  {
    $model = new LoginForm();
    if(isset($_POST['LoginForm']))
    {
      $model->attributes = $_POST['LoginForm'];
      if($model->validate())
      {
        $this->redirect('index');
      }
    }
    $this->render('main', array('model'=>$model));
  }
}
?>


הקונטרולר main(הקונטרולר שמכיל את login).

avatar ענה intval ב 10 לדצמבר 2013 #

לפי מה שזה נראה, ההשמה של הערך מהצ'קבוקס לא מתבצעת בגלל שאין rule בתוך ה-model שמרשה לעשות את זה.

public function rules()
{
  return array(
    array('email, password', 'required', 'message' => Yii::lang('login_form_null_inputs')),
    array('email', 'email', 'allowEmpty' => false, 'checkMX' => true, 'message' => Yii::lang('login_form_null_inputs')),
    array('password', 'authenticate'),
    array('rememberMe', 'boolean')
  );
}

avatar ענה ArielTador ב 10 לדצמבר 2013 #

אופסי :S

תודה אחי, אוהב אותך!